<?php
namespace Home\Model;
use Think\Model;
class ComListModel extends Model {
	protected $connection = array(
	'db_type'         => 'mysql',
	'db_user'         => 'root',
	'db_pwd'          => 'root',
	'db_host'         => 'localhost',
	'db_port'         => '3306',
	'db_name'         => 'test',
	'db_charset'      => 'utf8',
	);

	//是否查询mssql的数据
	public $find_mssql=true;

	public $company_cache=array();


	public function _initialize()
	{
		
		$this->company_cache=F("company_cache");
	}




	public function add_new($nsrsbh,$nsrmc)
	{
		$nsrmc=formtCompanyName($nsrmc);
		$old_row=$this->find_row($nsrsbh,$nsrmc);
		dump($old_row);
		die();
		if(empty($old_row))
		{
			$add_data	=	array(
								'nsrsbh'=>$nsrsbh,
								'nsrmc'=>$nsrmc,
								'md5_str'=>md5($nsrsbh.$nsrmc),
								'add_time'=>date("Y-m-d H:i:s")
							);

			$sbh9_17=getJgdmz($nsrsbh);

			if(strlen($sbh9_17)==9)
			{
				$add_data['sbh9_17']=$sbh9_17;
			}





			$mssql_comid=$this->find_mssql_cominfo($nsrsbh,$nsrmc);
			if($mssql_comid!=false) $add_data['mssql_comid']=$mssql_comid;


			
			

			if($this->data($add_data)->add())
			{
				$this->upCompanyCache($add_data);
				if($this->find_mssql)	return $add_data['mssql_comid'];
				else return true;
			}
			else
				return false;
		}
		else
		{
			if($this->find_mssql)	return $old_row['mssql_comid'];
			else return true;
		}
	}

/**
 * 根据那识别号和企业名字查询.当两个参数都有内容的时候.按md5值查询
 * @param  [type] $nsrsbh [description]
 * @param  [type] $nsrmc  [description]
 * @return [type]         [description]
 */
	public function find_row($nsrsbh,$nsrmc)
	{
		$where=array();

		if(!empty($nsrsbh) && !empty($nsrmc))
		{
			$where['md5_str']=md5($nsrsbh.$nsrmc);
		}
		else
		{
			if(!empty($nsrsbh)) $where['nsrsbh']=$nsrsbh;
			if(!empty($nsrmc)) $where['nsrmc']=$nsrmc;
		}

		//if(isset($this->company_cache[$where['md5_str']])) $row=$this->company_cache[$where['md5_str']];
		//else $row=$this->where($where)->find();

		$row=$this->where($where)->find();


		if(!empty($row) && empty($row['mssql_comid']))
		{
			$mssql_comid=$this->find_mssql_cominfo($row['nsrsbh'],$row['nsrmc']);
			if($mssql_comid!=false)
			{
				$row['mssql_comid']=$mssql_comid;
				$this->where(array('id'=>$row['id']))->save(array('mssql_comid'=>$mssql_comid));
				$this->upCompanyCache($row['id']);
			}
		}

		return $row;

	}


	public function find_mssql_cominfo($nsrsbh,$nsrmc,$only_id=true)
	{
		if($this->find_mssql==false) return false;
		$ms_cominfo=D("CzjCom")->findInfo($nsrsbh,$nsrmc);

		if(!empty($ms_cominfo))
		{
			if($only_id) return $ms_cominfo['comid'];
			else return $ms_cominfo;
		}
		else
		{
			$sbh9_17=getJgdmz($nsrsbh);
			//如果9-17位内有英文.并且没有找到对应的企业.就新增加一个企业
			if(true)
			{
				$new_id=D("CzjCom")->addNewCom($nsrsbh,$nsrmc);
				if($new_id==false) return false;
				else
				{
					if($only_id) return $new_id;
					else return array('comid'=>$new_id,'com_name'=>$nsrmc,'com_nsrsbh'=>$nsrsbh);
				}
			}
			else
				return false;
		}
	}


/**
 * 根据识别号和企业名称去查询CSV里的数据.如果有不一致的.就更新数据
 * @param  [type] $nsrsbh [description]
 * @param  [type] $nsrmc  [description]
 * @param  [type] $comid  [description]
 * @return [type]         [description]
 */
	public function upSbhName($nsrsbh,$nsrmc,$now_comid)
	{
		$md_CzjCom=D("CzjCom");
		$csv_row=$this->find_row($nsrsbh,$nsrmc);
		if(empty($csv_row))
		{
			addnewLog("企业:$nsrmc 没有在csv数据中找到完全一致的数据;");
			//echo "企业:$nsrmc 没有在csv数据中找到完全一致的数据;\r\n";
			//2.2.按识别号单独查询
			$csv_row2=$this->find_row($nsrsbh,'');
			if(empty($csv_row2))
			{
				addnewLog("识别号:$nsrsbh 没有在csv数据中找到一致的数据;");
				//echo "识别号:$nsrsbh 没有在csv数据中找到一致的数据;\r\n";
				//2.3.按企业名称单独查询
				$csv_row3=$this->find_row('',$nsrmc);
				if(empty($csv_row3))
				{
					addnewLog("企业名称:$nsrmc 没有在csv数据中找到一致的数据;");
					//echo "企业名称:$nsrmc 没有在csv数据中找到一致的数据;\r\n";
					return false;
				}
				else
				{
					addnewLog("企业:$nsrmc 识别号:[$nsrsbh]和CSV数据中的[".$csv_row3['nsrsbh']."]不一致;");
					//echo "企业:$nsrmc 识别号:[$nsrsbh]和CSV数据中的[".$csv_row3['nsrsbh']."]不一致;\r\n";
					//更新识别号
					$md_CzjCom->upComSbh($now_comid,$csv_row3['nsrsbh']);
					
				}
			}
			else
			{
				if($nsrmc!=$csv_row2['nsrmc'])
				{
					addnewLog("识别号:[$nsrsbh]的企业名称:[$nsrmc]和CSV数据中的[".$csv_row2['nsrmc']."]不一致;");
					//echo "识别号:[$nsrsbh]的企业名称:[$nsrmc]和CSV数据中的[".$csv_row2['nsrmc']."]不一致;\r\n";
					//更新数据中的企业名称
					//$md_CzjCom->upComName($now_comid,$csv_row2['nsrmc']);
				}
				else
				{
					addnewLog("识别号:[$nsrsbh]的企业名称:[$nsrmc]和CSV数据中的[".$csv_row2['nsrmc']."]一致;但MD5值不一致;");
				}
				//$company_states=false;
			}
		}
		return true;
	}



	public function getCsvCompany($file)
	{
		$nead_row	=	array(
								'nsrsbh' =>array('纳税人识别号','nsrsbh'),
								'nsrmc'  =>array('纳税人名称','nsrmc'),
							);
		$this->find_mssql=false;

		if(!file_exists($file))
		{
			echo "$file 文件不存在!";
			return false;
		}

		$f = fopen($file,"r");
		$i=0;

		while(! feof($f))
		{
			$row=fgetcsv($f);
			$row=array_map('iconv_gtu', $row);


			$i++;
			if($i==1)
			{
				//解析表头
				$row_key=findRowKey($row,$nead_row);
				continue;
			}

			if(!is_array($row_key))
			{
				return false;
			}

			$data_row=array();
			//表头处理完毕.开始处理内容
			foreach($row_key as $key=>$row_num)
			{
				$data_row[$key]=$row[$row_num];
			}

			if(empty($data_row['nsrsbh']) && empty($data_row['nsrmc'])) continue;

			echo $data_row['nsrsbh']."\\".$data_row['nsrmc']."\r\n";

			$state=$this->add_new($data_row['nsrsbh'],$data_row['nsrmc']);



			if($state!=false)
			{
				echo "第 $i 行数据添加完成!\r\n";
			}
			else
			{
				echo "第 $i 行数据添加失败!\r\n";
			}
			unset($row);
		}
		fclose($f);
		unset($f);
	}


	public function upCompanyCache($compnay)
	{
		if(is_numeric($compnay))
		{
			$compnay=$this->where(array('id'=>$compnay))->find();
		}

		if(isset($compnay['md5_str'])) 
		{
			$this->company_cache[$compnay['md5_str']]=$compnay;
			F("company_cache",$this->company_cache);
		}

	}

}
?>